/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.marcelo.agro.entidades.validadores;

import org.marcelo.agro.core.api.ICampanhas;
import org.marcelo.agro.entidades.Campanas;
import org.marcelo.agro.formularios.IFormularioCampanias;

/**
 *
 * @author marcelo
 */
public class ValidadorCampania  implements Validadores{
    SquemaValidadores validadores;
    Campanas campanas;
    ICampanhas ic;
    IFormularioCampanias formulario;
    String mensajeError = "";

    public ValidadorCampania(IFormularioCampanias formulario, Campanas campanas, ICampanhas ic) {
        validadores =new SquemaValidadores();
        this.formulario = formulario;
        this.campanas = campanas;
        this.ic =ic;
        setValidadores();
    }
    
    private void setValidadores() {
        validadores.addValidador(new AbstractValidator(formulario.getNombre()) {

            @Override
            public boolean isValid() {
                
                    if( campanas.getNombre() == null || campanas.getNombre().isEmpty()) {
                        mensajeError = IFormularioCampanias.MENSAJE_ERROR_NOMBRE_VACIO;
                        formulario.showError(mensajeError);
                        return false;
                    }
                    
                       
                    
                    if(!ic.esUnico(campanas)) {
                        mensajeError = IFormularioCampanias.MENSAJE_ERROR_NOMBRE_REPETIDO;
                        formulario.showError(mensajeError);
                        return false;
                    }
                    formulario.hiddeError();
                    return true;
            }
        });
        
        validadores.addValidador(new AbstractValidator(formulario.getFechaInicio()) {

            @Override
            public boolean isValid() {
                
                    if (campanas.getFechaInicio() == null){
                        mensajeError= IFormularioCampanias.MENSAJE_ERROR_FECHA_NULA;
                        formulario.showError(mensajeError);
                        return false;
                    }
                    formulario.hiddeError();
                    return true;
            }
        });
        
        //Validador para la fecha de fin
        validadores.addValidador(new AbstractValidator(formulario.getFechaFin()) {

            @Override
            public boolean isValid() {
                
                
                    if (campanas.getFechaFin() == null){
                        mensajeError= IFormularioCampanias.MENSAJE_ERROR_FECHA_NULA;
                        formulario.showError(mensajeError);
                        return false;
                    }
                    if (campanas.getFechaInicio() != null && campanas.getFechaInicio().after(campanas.getFechaFin())) {
                        mensajeError = IFormularioCampanias.MENSAJE_ERROR_FECHA_FIN_MENOR;
                        formulario.showError(mensajeError);
                        return false;
                    }
                    formulario.hiddeError();
                    return true; 
            }
        });
        
    }
    
    public String getMensaje() {
        return mensajeError;
    }

    @Override
    public boolean checkValidity() {
        return validadores.checkValidity();
    }
    
    
    
    
//    /**
//     * La idea de esta interfaz es englobar todas las caracteristicas que deben cumplir los formularios
//     * para visualizar una campanha
//     */
//    
//    public interface FormularioCampaña {
//        
//        
//        public static final String PROPIEDAD_NOMBRE = "campaniaNombre";
//        public static final String PROPIEDAD_FECHA_INICIO = "campaniaFechaInicio";
//        public static final String PROPIEDAD_FECHA_FIN = "campaniaFechaFin";
//        public static final String PROPIEDAD_ESTA_ACTIVO = "campaniaEstaActivo";
//        public static final String PROPIEDAD_DESCRIPCION = "campaniaDescripcion";
//        
//        public static final String MENSAJE_ERROR_NOMBRE_VACIO = "El nombre no puede esta en blanco";
//        public static final String MENSAJE_ERROR_NOMBRE_REPETIDO = "El nombre esta repetido";
//        public static final String MENSAJE_ERROR_FECHA_NULA = "La fecha no puede ser nula";
//        public static final String MENSAJE_ERROR_FECHA_FIN_MENOR = "La fecha de fin debe ser mayor a la fecha de inicio";
//        
//        /**
//         * Retorna el valor para el campo nombre
//         * @return 
//         */
//        public JTextField getNombre();
//        /**
//         * Retorna el valor para el campo Fecha Inicio
//         * @return 
//         */
//        public JXDatePicker getFechaInicio();
//        
//        /**
//         * Retorna el valor para el campo Fecha Fin
//         * @return 
//         */
//        public JXDatePicker getFechaFin();
//        
//        /**
//         * Retorna el valor para el campo Esta activo
//         * @return 
//         */
//        public JCheckBox getEstaActivo();
//        
//        /**
//         * Retorna el valor para el campo Descripcion
//         * @return 
//         */
//        
//        public JTextArea getDescripcion();
//        
//        /**
//         * Muestra los mensajes de error del formulario
//         * @param mensajeError 
//         */
//        
//        public void  showError(String mensajeError);
//        /**
//         * Oculta el mensaje de error
//         */
//        public void  hiddeError();
//    }
}

